package estore;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ProductService {

    /**
     * 商品服务类，负责商品相关的业务逻辑
     * 目前使用内存Map模拟数据库
     */

        // 使用Map存储商品数据，key是商品ID，value是商品对象
        // 优点：通过ID查找商品时，时间复杂度是O(1)，非常高效
        private final Map<String, Product> productData = new HashMap<>();

        /**
         * 构造函数，初始化一些商品数据
         */
        public ProductService() {
            // 为Java书籍创建标签
            Set<String> javaBookTags = new HashSet<>();
            javaBookTags.add("编程");
            javaBookTags.add("畅销");
            javaBookTags.add("技术");
            productData.put("p001", new Product("p001", "Java从入门到精通", 99.0, 100, javaBookTags));
            
            // 为MySQL书籍创建标签
            Set<String> mysqlBookTags = new HashSet<>();
            mysqlBookTags.add("数据库");
            mysqlBookTags.add("高性能");
            mysqlBookTags.add("热门");
            productData.put("p002", new Product("p002", "高性能MySQL", 128.5, 50, mysqlBookTags));
            
            // 为颈椎康复指南创建标签，并测试添加重复标签
            Set<String> healthBookTags = new HashSet<>();
            healthBookTags.add("健康");
            healthBookTags.add("生活");
            healthBookTags.add("热门");
            // 添加重复标签，验证Set的唯一性
            healthBookTags.add("热门"); // 这行会被忽略，因为Set不允许重复元素
            System.out.println("颈椎康复指南的标签集合大小: " + healthBookTags.size()); // 应该输出3，而不是4
            productData.put("p003", new Product("p003", "颈椎康复指南", 45.0, 200, healthBookTags));
            
            // 库存为0的商品，不添加标签
            productData.put("p004", new Product("p004", "生发秘籍", 88.0, 0));
            
            // 添加两个带标签的商品
            Set<String> skincareTags = new HashSet<>();
            skincareTags.add("美容");
            skincareTags.add("护肤");
            productData.put("p005", new Product("p005", "祛痘秘籍", 99.0, 100, skincareTags));
            
            Set<String> fitnessTags = new HashSet<>();
            fitnessTags.add("健身");
            fitnessTags.add("生活");
            fitnessTags.add("热门");
            fitnessTags.add("热门"); // 测试重复标签
            productData.put("p006", new Product("p006", "减肥秘籍", 88.0, 100, fitnessTags));
        }

        /**
         * 获取所有商品列表
         * @return 商品列表
         */
        public List<Product> getAllProducts() {
            // 从Map的值集合创建一个新的ArrayList并返回
            return new ArrayList<>(productData.values());
        }

        /**
         * 根据ID查找商品
         * @param id 商品ID
         * @return 找到的商品对象，如果不存在则返回null
         */
        public Product findProductById(String id) {
            return productData.get(id);
        }
}